from twisted.internet import protocol, reactor
import MySQLdb

"""
	Daemon
	Requisitos funcionais:
		* Escutar na porta 666 por novas requisicoes
		* Gravar as requisicoes vindas de um IP previamente
		  cadastrado em um banco de dados
"""

class Temperature(protocol.Protocol):
	def __init__(self, conn, client_addr):
		self.client_addr = client_addr
		self.conn = conn
		self.coletor_id = self._buscaColetorID()

	def dataReceived(self, data):
		temperatura = data
		if self.coletor_id != None:
			self._gravaHistorico(temperatura)
		
	def _buscaColetorID(self):
		cursor = self.conn.cursor()
		
		cursor.execute("SELECT id FROM dashboard_coletor WHERE ip = '" \
					   + str(self.client_addr) + "'")
		
		result = cursor.fetchone()
		return int(result[0])
	
	def _gravaHistorico(self, temperatura):
		import datetime
		cursor = self.conn.cursor()
		
		cursor.execute("INSERT INTO dashboard_historico (coletor_id, data, temperatura)" + \
					   " VALUES (%s, %s, %s) ", (self.coletor_id, datetime.datetime.now(), temperatura))
		
class TempFactory(protocol.Factory):
	def __init__(self, conn):
		self.conn = conn
		
	def buildProtocol(self, addr):
		return Temperature(conn, addr.host)

conn = MySQLdb.connect(user='zc', passwd='zc', db='zc')

reactor.listenTCP(666, TempFactory(conn))
reactor.run()
